home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Software Contest 3 / FM Towns Software Contest 3.iso / exp / video_t / no1 / c_sorse / cdplay2.c < prev    next >
Text File  |  1994-01-07  |  7KB  |  310 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <cdrfrb.h>
  5. #include <winb.h>
  6. #include <te.h>
  7. #include <fntb.h>
  8. #include <gui.h>
  9.  
  10. int    Dialog_cdplay = -1 ;
  11. int    Message_cd3 = -1 ;
  12. int    Message_cd2 = -1 ;
  13. int    Message_cd1 = -1 ;
  14. int    TIcon_cd1 = -1 ;
  15. int    TIcon_cd2 = -1 ;
  16. int    _001Message_cd2 = -1 ;
  17. int    _002Message_cd2 = -1 ;
  18. int    _003Message_cd2 = -1 ;
  19. int    _004Message_cd2 = -1 ;
  20. int    _005Message_cd2 = -1 ;
  21. int    _006Message_cd2 = -1 ;
  22. int    NumBox_cd1 = -1 ;
  23. int    _001NumBox_00a7 = -1 ;
  24. int    _002NumBox_00a7 = -1 ;
  25. int    DButton_cd0 = -1 ;
  26. int    Button_cd1 = -1 ;
  27. int    DButton_cd2 = -1 ;
  28. int    DButton_cd3 = -1 ;
  29. int    _007Message_cd2 = -1 ;
  30. int    _008Message_cd2 = -1 ;
  31. int    _009Message_cd2 = -1 ;
  32. int    _010Message_cd2 = -1 ;
  33. int    Message_cd10 = -1 ;
  34. int    _001Message_cd10 = -1 ;
  35.  
  36.  
  37. extern     int    backid ;
  38. extern int    Dia_edit ;
  39. extern int    Dialog_menu ;
  40. extern int    Text ;
  41.  
  42. int     type=0,strt=0,endt=0;
  43. int     sts=0,no=0,acv=0;
  44.  
  45. struct TIMEADRS st,ed;
  46. struct TIMEADRS *track=NULL;
  47.  
  48. int     CD_open(void)
  49. {
  50.     int     i;
  51.     struct TIMEADRS disc;
  52.  
  53.     if ( track != NULL && acv != 0 )
  54.         return 0;
  55.  
  56.     if ( track == NULL && (track =(struct TIMEADRS *)malloc(sizeof(track)*99)) == NULL )
  57.         return 1;
  58.  
  59.     do {
  60.         i = cdr_cdinfo(0,&type,&strt,&endt,track,&disc);
  61.     } while ( i == CDERR7 );
  62.  
  63.     if ( disc.frame-- <= 0 ) {
  64.         disc.frame = 74;
  65.  
  66.     if ( disc.sec-- <= 0 ) {
  67.         disc.sec = 59;
  68.         if ( disc.min-- <= 0 )
  69.         return 1;
  70.     }
  71.     }
  72.  
  73.     track[endt].min = disc.min;
  74.     track[endt].sec = disc.sec;
  75.     track[endt].frame = disc.frame;
  76.  
  77.     if ( i == 0 ) acv = 1;
  78.     return i;
  79. }
  80.  
  81.  
  82.  
  83. void    CD_play(cdno,tmin,tsec)
  84. int    cdno;
  85. int    tmin;
  86. int    tsec;
  87. {
  88. int    min_dummy;
  89. int    sec_dummy;
  90.  
  91.     if(cdno==0)    cdr_mstop(0);
  92.  
  93.     if ( cdr_mphase(0,&sts,&no,&st,&ed) != 0 )
  94.         return;
  95.  
  96.     if ( sts != 0 )
  97.         return;
  98.  
  99.     if ( CD_open() != 0 ) return;
  100.  
  101.     if ( endt > 0 ) 
  102.     {
  103.     min_dummy=track[cdno-1].min;
  104.     sec_dummy=track[cdno-1].sec;
  105.     track[cdno-1].min=track[cdno-1].min+tmin;
  106.     track[cdno-1].sec=track[cdno-1].sec+tsec;
  107.     if(track[cdno-1].sec >= 60)    
  108.         {
  109.         track[cdno-1].min=track[cdno-1].min+1;
  110.         track[cdno-1].sec=track[cdno-1].sec-60;
  111.         }
  112.     no = cdr_mtplay(0,&(track[cdno-1]),&(track[cdno] ));
  113.     track[cdno-1].min=min_dummy;
  114.     track[cdno-1].sec=sec_dummy;
  115.     }
  116. }
  117.  
  118.  
  119.  
  120.  
  121.  
  122. void    CD_play2()
  123. {
  124. int    i;
  125.     if ( cdr_mphase(0,&sts,&no,&st,&ed) != 0 )
  126.         return;
  127.     if ( sts != 0 )
  128.         return;
  129.     if ( CD_open() != 0 ) return;
  130.     if ( endt > 0 ) {
  131.         for ( i=0 ; i < endt && (track[i].min & 0x80) != 0 ; i++ );
  132.         no = cdr_mtplay(0,&(track[i]),&(track[endt]));
  133.     }
  134. }
  135.  
  136.  
  137. int    radiocd;
  138. /*    initDataCDPLAY:TIcon_cd1:MJ_TICONL40の呼び出し関数    */
  139. /*    initDataCDPLAY:TIcon_cd2:MJ_TICONL40の呼び出し関数    */
  140. int    cd_bottan(kobj, messId, argc, pev, trigger)
  141. int        kobj ;
  142. int        messId ;
  143. int        argc ;
  144. EVENT    *pev ;
  145. int        trigger ;
  146. {
  147. /*    現在選択状態にあるボタンを非選択状態にし、選択可にします    */
  148. MTL_resetFlagObj(radiocd,~(MS_UNSELECT | MS_TOGGLE)) ;
  149. MMI_SendMessage(radiocd, MM_SHOW, 0) ;
  150. /*    画面選択フラグを更新します    */
  151. radiocd = kobj ;
  152.  
  153. /*    呼び出し元トグルボタンを選択状態にし、選択不可にします    */
  154. MTL_setFlagObj(kobj, MS_UNSELECT | MS_TOGGLE) ;
  155. MMI_SendMessage(kobj, MM_SHOW, 0) ;
  156.  
  157. if (TIcon_cd1 == radiocd)
  158.     {
  159.     MMI_SendMessage(NumBox_cd1, MM_SETNUMBOX, 5, 0, 0, 0, 1, 0) ;
  160.     MMI_SendMessage(_001NumBox_00a7, MM_SETNUMBOX, 5, 0, 0, 0, 1, 0) ;
  161.     MMI_SendMessage(_002NumBox_00a7, MM_SETNUMBOX, 5, 0, 0, 0, 1, 0) ;
  162.     MMI_SendMessage(NumBox_cd1, MM_SHOW, 0) ;
  163.     MMI_SendMessage(_001NumBox_00a7, MM_SHOW, 0) ;
  164.     MMI_SendMessage(_002NumBox_00a7, MM_SHOW, 0) ;
  165.     }
  166. else    {
  167.     MMI_SendMessage(NumBox_cd1, MM_SETNUMBOX, 5, 0, 0, 99, 1, 0) ;
  168.     MMI_SendMessage(_001NumBox_00a7, MM_SETNUMBOX, 5, 0, 0, 90, 1, 0) ;
  169.     MMI_SendMessage(_002NumBox_00a7, MM_SETNUMBOX, 5, 0, 0, 59, 1, 0) ;
  170.     MMI_SendMessage(NumBox_cd1, MM_SHOW, 0) ;
  171.     MMI_SendMessage(_001NumBox_00a7, MM_SHOW, 0) ;
  172.     MMI_SendMessage(_002NumBox_00a7, MM_SHOW, 0) ;
  173.     }
  174.  
  175. return NOERR ;
  176. }
  177.  
  178. /*    initDataCDPLAY:DButton_cd0:MJ_DBUTTONL40の呼び出し関数    */
  179. int    cd_stop(kobj, messId, argc, pev, trigger)
  180. int        kobj ;
  181. int        messId ;
  182. int        argc ;
  183. EVENT    *pev ;
  184. int        trigger ;
  185. {
  186. CD_play(0,0,0);
  187. return NOERR ;
  188. }
  189.  
  190. /*    initDataCDPLAY:Button_cd1:MJ_DBUTTONL40の呼び出し関数    */
  191. int    cd_on(kobj, messId, argc, pev, trigger)
  192. int        kobj ;
  193. int        messId ;
  194. int        argc ;
  195. EVENT    *pev ;
  196. int        trigger ;
  197. {
  198. char    moji[250];
  199. int    track,mine,sec;
  200. char    suu[10];
  201. int    min, max, delta, ptColum ;
  202. /*    メニューを選択可とします。    */
  203.  
  204. MMI_SendMessage(NumBox_cd1, MM_GETNUMBOX, 5,
  205.                 &track, &min, &max, &delta, &ptColum) ;
  206. MMI_SendMessage(_001NumBox_00a7, MM_GETNUMBOX, 5,
  207.                 &mine, &min, &max, &delta, &ptColum) ;
  208. MMI_SendMessage(_002NumBox_00a7, MM_GETNUMBOX, 5,
  209.                 &sec, &min, &max, &delta, &ptColum) ;
  210.  
  211. MTL_resetAtrObj(backid, ~MS_DSPONLYL40) ;
  212. MTL_resetAtrObj(Dialog_menu, ~MS_DSPONLYL40) ;
  213. MTL_resetAtrObj(Dia_edit, ~MS_DSPONLYL40) ;
  214. if (TIcon_cd1 == radiocd)
  215.     {
  216.     moji[0]='\0';
  217.     strcat(moji,"/cdplay");
  218.     }
  219. else    {
  220.      if(track==0)
  221.         {
  222.         moji[0]='\0';
  223.         strcat(moji,"/CDPLAY 0");
  224.         }
  225.     else    {
  226.         moji[0]='\0';
  227.         strcat(moji,"/CDPLAY ");
  228.         _itoa(track,suu,10);
  229.         strcat(moji,suu);
  230.         strcat(moji," ");
  231.         _itoa(mine,suu,10);
  232.         strcat(moji,suu);
  233.         strcat(moji," ");
  234.         _itoa(sec,suu,10);
  235.         strcat(moji,suu);
  236.         }
  237.     }
  238.  
  239. MMI_SendMessage(Text,MM_SETTEXT,3,moji,200,TRUE) ;
  240. MMI_SendMessage(Text,MM_SETTEXT,3,"\n",5,TRUE) ;
  241. MMI_SendMessage(Dialog_cdplay,MM_ERASE,0) ;
  242. MMI_SendMessage(Dialog_cdplay,MM_DETACH,0) ;
  243. MMI_SendMessage(Text, MM_ERASE, 0) ;
  244. MMI_SendMessage(Text, MM_WAKE, 0) ;
  245. MMI_SendMessage(Text, MM_SHOW, 0) ;
  246.  
  247. return NOERR ;
  248. }
  249.  
  250. /*    initDataCDPLAY:DButton_cd2:MJ_DBUTTONL40の呼び出し関数    */
  251. int    cd_kaku(kobj, messId, argc, pev, trigger)
  252. int        kobj ;
  253. int        messId ;
  254. int        argc ;
  255. EVENT    *pev ;
  256. int        trigger ;
  257. {
  258. int    ret;
  259. int    track,mine,sec;
  260. int    min, max, delta, ptColum ;
  261.  
  262. ret=MTL_checkFlagObj(TIcon_cd1,MS_TOGGLE);
  263. if(ret==0x10)
  264. {
  265. CD_play2();
  266. return NOERR ;
  267. }
  268. MMI_SendMessage(NumBox_cd1, MM_GETNUMBOX, 5,
  269.                 &track, &min, &max, &delta, &ptColum) ;
  270. MMI_SendMessage(_001NumBox_00a7, MM_GETNUMBOX, 5,
  271.                 &mine, &min, &max, &delta, &ptColum) ;
  272. MMI_SendMessage(_002NumBox_00a7, MM_GETNUMBOX, 5,
  273.                 &sec, &min, &max, &delta, &ptColum) ;
  274.  
  275. CD_play(track,mine,sec);
  276. return NOERR ;
  277. }
  278.  
  279. /*    initDataCDPLAY:DButton_cd3:MJ_DBUTTONL40の呼び出し関数    */
  280. int    cd_off(kobj, messId, argc, pev, trigger)
  281. int        kobj ;
  282. int        messId ;
  283. int        argc ;
  284. EVENT    *pev ;
  285. int        trigger ;
  286. {
  287. MMI_SendMessage(Dialog_cdplay,MM_ERASE,0) ;
  288. MMI_SendMessage(Dialog_cdplay,MM_DETACH,0) ;
  289. /*    メニューを選択可とします。    */
  290. MTL_resetAtrObj(Dialog_menu, ~MS_DSPONLYL40) ;
  291. MTL_resetAtrObj(Dia_edit, ~MS_DSPONLYL40) ;
  292. MTL_resetAtrObj(backid, ~MS_DSPONLYL40) ;
  293.  
  294. return NOERR ;
  295. }
  296.  
  297. int    l_cdplay()
  298. {
  299. /*    背景を選択不可とします。*/
  300. MTL_setAtrObj(backid, MS_DSPONLYL40) ;
  301. MTL_setAtrObj(Dialog_menu, MS_DSPONLYL40) ;
  302. MTL_setAtrObj(Dia_edit, MS_DSPONLYL40) ;
  303.  
  304. MMI_SendMessage(Dialog_cdplay,MM_ATTACH,1,MMI_GetBaseObj()) ;
  305. MMI_SendMessage(Dialog_cdplay, MM_SHOW, 0) ;
  306. return NOERR ;
  307. }
  308.  
  309.  
  310.